package com.mvc.controller;

import hbm.Gasto;
import hbm.GastoDAO;
import hbm.Sucursal;
import hbm.SucursalDAO;
import hbm.TipoGasto;
import hbm.TipoGastoDAO;

import java.io.IOException;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class GastoController extends HttpServlet {

	/**
	 * 
	 */
	public class GastoTipo {

		private String gasto;
		private String tipo;
		private String factura;

		public String getFactura() {
			return factura;
		}

		public String getGasto() {
			return gasto;
		}

		public String getTipo() {
			return tipo;
		}

		public void setFactura(String factura) {
			this.factura = factura;
		}

		public void setGasto(String gasto) {
			this.gasto = gasto;
		}

		public void setTipo(String tipo) {
			this.tipo = tipo;
		}

	}

	private static final long serialVersionUID = 1L;

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	@Override
	@SuppressWarnings("unchecked")
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String opcion = request.getParameter("opcion");

		if (opcion != null && opcion.equals("elimina")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Gasto> listaGasto = new GastoDAO().findAll();
				request.getSession().setAttribute("listadoGasto", listaGasto);
				response.sendRedirect("./jsp/eliminarGasto.jsp");
			} else {
				String idGasto = request.getParameter("idGasto");
				Gasto gasto = new Gasto();
				gasto.setId(Integer.parseInt(idGasto));
				Session session = new GastoDAO().getSession();
				Transaction tx = session.beginTransaction();
				Object findAAgain = session.merge(gasto);
				session.delete(findAAgain);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoGasto.jsp");
			}
		}

		if (opcion != null && opcion.equals("gasto")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Guardar")) {

				Gasto gasto = new Gasto();
				BigDecimal costo = new BigDecimal(request
						.getParameter("txtcosto"));
				String factura = request.getParameter("txtfactura");
				Integer idTipoGasto = Integer.parseInt(request
						.getParameter("idTipoGasto"));
				TipoGasto tipoGastoSeleccionado = new TipoGastoDAO()
						.findById(idTipoGasto);
				Integer idSucusal = Integer.parseInt(request
						.getParameter("idSucursal"));
				Sucursal sucursalSeleccionado = new SucursalDAO()
						.findById(idSucusal);
				String fechaPago = request.getParameter("fecha_c");
				SimpleDateFormat dtTmp = new SimpleDateFormat("yyyy-MM-dd");
				Date fecha;
				try {
					fecha = dtTmp.parse(fechaPago);
					gasto.setFecha(fecha);
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				gasto.setMonto(costo);
				gasto.setNoFactura(factura);
				gasto.setTipoGasto(tipoGastoSeleccionado);
				gasto.setSucursal(sucursalSeleccionado);

				Session session = new GastoDAO().getSession();
				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(gasto);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoGasto.jsp");
			}
		}

		if (opcion != null && opcion.equals("consulta")) {
			Session session = new GastoDAO().getSession();

			List<Gasto> listaGasto = new GastoDAO().findAll();
			// List<Marcas> listaMarcas = new ArrayList<Marcas>();
			List<GastoTipo> listaGastoTipo = new ArrayList<GastoTipo>();

			Iterator itr = listaGasto.listIterator();
			if (listaGasto.size() != 0) {
				while (itr.hasNext()) {
					GastoTipo gt = new GastoTipo();
					Gasto gas = (Gasto) itr.next();
					gt.setFactura(gas.getNoFactura());
					gt.setGasto(gas.getMonto().toString());
					TipoGasto idTipoGasto = gas.getTipoGasto();
					TipoGasto tipoGastoIndex = new TipoGastoDAO()
							.findById(idTipoGasto.getId());
					gt.setTipo(tipoGastoIndex.getDescripcion());
					// listaProveedor.add(proveedorIndex);

					listaGastoTipo.add(gt);
				}
			}
			request.getSession().setAttribute("listaGastoTipo", listaGastoTipo);
			session.close();
			response.sendRedirect("./jsp/mantenimientoGasto.jsp");
		}

		if (opcion != null && opcion.equals("edita")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Gasto> listaGasto = new GastoDAO().findAll();
				request.getSession().setAttribute("listadoGasto", listaGasto);
				response.sendRedirect("./jsp/seleccionGasto.jsp");
			}
		}

		if (opcion != null && opcion.equals("filtrar")) {
			Integer idGasto = Integer.parseInt(request.getParameter("idGasto"));
			Gasto gastoSeleccionada = new GastoDAO().findById(idGasto);
			request.getSession().setAttribute("idGastoSeleccionada",
					gastoSeleccionada.getId());
			request.getSession().setAttribute("facturaGastoSeleccionada",
					gastoSeleccionada.getNoFactura());
			request.getSession().setAttribute("costoGastoSeleccionada",
					gastoSeleccionada.getMonto());
			request.getSession().setAttribute("fechaGastoSeleccionada",
					gastoSeleccionada.getFecha());
			List<TipoGasto> listaTipoGasto = new TipoGastoDAO().findAll();
			request.getSession().setAttribute("listadoTipoGasto",
					listaTipoGasto);
			List<Sucursal> listaSucursal = new SucursalDAO().findAll();
			request.getSession().setAttribute("listadoSucursales",
					listaSucursal);
			response.sendRedirect("./jsp/editarGasto.jsp");
		}

		if (opcion != null && opcion.equals("listarGasto")) {
			List<TipoGasto> listaTipoGasto = new TipoGastoDAO().findAll();
			request.getSession().setAttribute("listadoTipoGasto",
					listaTipoGasto);
			List<Sucursal> listaSucursal = new SucursalDAO().findAll();
			request.getSession().setAttribute("listadoSucursales",
					listaSucursal);
			response.sendRedirect("./jsp/ingresoGasto.jsp");
		}

		if (opcion != null && opcion.equals("editando")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Editar")) {
				Gasto gastoSeleccionada = new Gasto();

				BigDecimal costo = new BigDecimal(request
						.getParameter("txtcosto"));
				String factura = request.getParameter("txtfactura");
				Integer idTipoGasto = Integer.parseInt(request
						.getParameter("idTipoGasto"));
				TipoGasto tipoGastoSeleccionado = new TipoGastoDAO()
						.findById(idTipoGasto);
				Integer idSucusal = Integer.parseInt(request
						.getParameter("idSucursal"));
				Sucursal sucursalSeleccionado = new SucursalDAO()
						.findById(idSucusal);
				String fechaPago = request.getParameter("fecha_c");
				SimpleDateFormat dtTmp = new SimpleDateFormat("yyyy-MM-dd");
				Date fecha;
				try {
					fecha = dtTmp.parse(fechaPago);
					gastoSeleccionada.setFecha(fecha);
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				gastoSeleccionada.setMonto(costo);
				gastoSeleccionada.setNoFactura(factura);
				gastoSeleccionada.setTipoGasto(tipoGastoSeleccionado);
				gastoSeleccionada.setSucursal(sucursalSeleccionado);

				Session session = new GastoDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(gastoSeleccionada);
				tx.commit();
				session.close();
				List<Gasto> listaGasto = new GastoDAO().findAll();
				request.getSession().setAttribute("listadoGasto", listaGasto);
				response.sendRedirect("./jsp/mantenimientoGasto.jsp");
			}
		}
	}

	/**
	 * Returns information about the servlet, such as author, version, and
	 * copyright.
	 * 
	 * @return String information about this servlet
	 */

}
